package cn.tedu.micro.demo.cart.service.impl;

import cn.tedu.micro.demo.cart.mapper.CartMapper;
import cn.tedu.micro.demo.cart.service.CartService;
import cn.tedu.micro.demo.common.pojo.po.CartPO;
import cn.tedu.micro.demo.common.pojo.vo.CartVO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Service
public class CartServiceImpl implements CartService {
    @Autowired
    private CartMapper cartMapper;

    @Override
    public void saveCart(Integer userId, String productCode, Integer count) {
        CartPO cartPO = new CartPO(null, userId, productCode, count);
        cartMapper.insert(cartPO);
    }

    @Override
    public List<CartVO> selectCartList(Integer userId) {
        QueryWrapper<CartPO> wrapper = new QueryWrapper<>();  // 查询条件的包装类
//        CartPO cartPO = new CartPO();
//        cartPO.setUserId(userId);
//        wrapper.setEntity(cartPO);
        wrapper.eq("user_id", userId);  // 等于
//        wrapper.like("product_code", "00001");  // 相似，SQL语句中的LIKE
//        wrapper.lt("count", 10);  // 小于 less than
//        wrapper.gt("count", 5);  // 大于 greater than
        List<CartPO> pos = cartMapper.selectList(wrapper);
        List<CartVO> vos = null;
        // pos转vos
        if (!pos.isEmpty() && pos.size() > 0) {
            // 第一种方法：遍历for循环
            /*  for (CartPO po : pos) {
                CartVO vo = new CartVO(po.getId(), po.getUserId(), po.getProductCode(), po.getCount());
                vos.add(vo);
            }*/
            // 第二种方法：使用Java8的stream流
            vos = pos.stream().map(CartPO->{
               CartVO vo = new CartVO();
                BeanUtils.copyProperties(CartPO, vo);
                return vo;
            }).collect(Collectors.toList());
        }
        return vos;
    }

    @Override
    public void deleteCart(Integer userId, String productCode) {
        QueryWrapper<CartPO> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("user_id", userId);
        queryWrapper.eq("product_code", productCode);
        cartMapper.delete(queryWrapper);
    }
}
